package com.wisecoach.gatewayplus.event;

/**
 * 将分发 {@link FilteredBlockEvent} 和 管理 {@link FilteredBlockEventListener}的业务逻辑从 {@link FilteredBlockEventPublisher} 移到该接口，
 * 令{@link FilteredBlockEventPublisher}更注重业务本身
 * {@code @author:} wisecoach
 * {@code @date:} 2023/3/3 下午7:18
 * {@code @version:} 1.0.0
 */

public interface FilteredBlockEventMulticaster {
    /**
     * 注册监听器，只允许在start前执行
     * @param channel 要监听的通道
     * @param listener 监听器
     */
    void addListener(String channel, FilteredBlockEventListener listener);

    void addListener(String channel, FilteredBlockEventListener listener, long startAt);

    /**
     * 移除监听器
     * @param channel 要监听的通道
     * @param listener 监听器
     */
    void removeListener(String channel, FilteredBlockEventListener listener);

    /**
     * 清空监听器
     */
    void clearListener();

    /**
     * 广播一个区块事件给listener
     */
    void multicastEvent(FilteredBlockEvent event);
}
